//B
/*
#include<stdio.h>

int n,x,y;
long long sum;

long long red(int);
long long blue(int);

long long red(int n)
{
	if(n==1)
	{
		return 0;
	}
	long long r=red(n-1);
	long long b=x*blue(n);
	return r+b;
}

long long blue(int n)
{
	if(n==1)
	{
		return 1;
	}
	long long r=red(n-1);
	long long b=y*blue(n-1);
	return r+b;
}

int main()
{
	scanf("%d%d%d",&n,&x,&y);
	sum=red(n);
	printf("%lld\n",sum);
	return 0;
}
*/

#include<stdio.h>
#include<string.h>
#define N 100010
#define null 0x3f3f3f3f


int n,m,s,t;
int head[N],e[N*2],ne[N*2],idx;
int q[N],hh,tt;
long long dist[N];
int str[N*2];

void add(int a,int b)
{
    e[idx]=b;
    ne[idx]=head[a];
    head[a]=idx++;
}

long long spfa()
{
    memset(dist,null,sizeof(dist));
    dist[s]=0;
    q[++tt]=s;
    str[s]=1;
    while(tt-hh>=0)
    {
        int t=q[hh++];
        str[t]=0;
        for(int i=head[t];i!=-1;i=ne[i])
        {
            int j=e[i];
            for(int u=head[j];u!=-1;u=ne[u])
            {
            	int p=e[u];
            	for(int v=head[p];v!=-1;v=ne[v])
            	{
            		int end=e[v];
            		if(dist[end]>dist[t]+1)
		            {
		                dist[end]=dist[t]+1;
		                if(!str[end])
		                {
		                    q[++tt]=end;
		                    str[end]=1;
		                }
		            }
				}
			}
            
        }
    }
    return dist[t];
}

void Init()
{
	memset(head,-1,sizeof(head));
	memset(str,0,sizeof(str));
	hh=0,tt=-1;
} 

int main()
{
    scanf("%d%d",&n,&m);
    Init(); 
    while(m--)
    {
        int a,b;
        scanf("%d%d",&a,&b);
        add(a,b);
    }
    scanf("%d%d",&s,&t);
    long long tmp=spfa();
    if(tmp==null)
    {
        printf("-1");
    }
    else
    {
        printf("%lld\n",tmp);
    }
    return 0;
}























